package com.yycx.common.mybatis.interceptor;

import cn.afterturn.easypoi.excel.entity.TemplateExportParams;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import com.yycx.common.base.entity.EntityMap;
import com.yycx.common.base.module.export.ExportField;
import com.yycx.common.base.module.MyExportParams;
import com.yycx.common.mybatis.model.ResultBody;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 数据导出处理器
 *
 * @author zyf
 */
public interface ExportInterceptor<T> {

    /**
     * 导出参数配置
     *
     * @param exportParams
     */
    default void initExportParams(MyExportParams exportParams) {
    }

    /**
     * 导出字段列表
     *
     * @param exportFieldList
     */
    default void initExportFieldList(List<ExportField> exportFieldList) {
    }

    /**
     * 导出字段自定义配置
     *
     * @param exportField
     * @param entityList
     */
    default void initExcelExportEntity(ExportField exportField, List<ExcelExportEntity> entityList) {

    }


    /**
     * 自定义导出数据设置
     *
     * @param params
     * @return
     */
    default ResultBody initData(Map params) {
        return ResultBody.ok();
    }

    /**
     * 模板路径
     *
     * @return
     */
    default TemplateExportParams initTemplateExportParams() {
        TemplateExportParams templateExportParams = new TemplateExportParams();
        return templateExportParams;
    }

    /**
     * 模板数据
     *
     * @return
     */
    default Map initTemplateDataMap() {
        HashMap<Object, Object> dataMap = new HashMap<>(5);
        return dataMap;
    }

    /**
     * 对导出结果处理
     *
     * @param dataMap
     * @param list
     */
    default void initExportData(Map dataMap, List<EntityMap> list) {

    }

    /**
     * 文件放到服务器的路径
     *
     * @param params
     * @return
     */
    default String serverPath(Map params) {
        return "";
    }

    /**
     * 导出成功回调事件
     *
     * @param params
     * @param fileKey
     * @param exportName
     * @return
     */
    default Boolean exportSuccess(Map params, String exportName, String fileKey) {
        return true;
    }
}
